#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>

int main()
{
  pid_t id=fork();
  if(id==0)
  {
    //child
    int cnt=5;
    while(cnt)
    {
      printf("child is running:cnt is:%d\n",cnt);
      cnt--;
      sleep(1);
    }
    exit(10);

  }
//  pid_t ret =wait(NULL);
  printf("father wait begin!\n");

  int status=0;
  while(1)
  {
    pid_t ret=waitpid(id,&status,WNOHANG);
    if(ret==0)
    {
      //子进程没有退出，但是waitpid等待成功，需要父进程继续等待
      printf("do father thing\n");

    }
    else if(ret>0)
    {
      //子进程退出waitpid等待成功 获得了对应的结果
      printf("father wait:%d  success status exit code:%d  status exit signal: %d\n",ret,(status>>8)&0xFF,status&0x7F);
      break;
    }
    else
    {
      //等待失败
    perror("waitpid");
      break;
      
    }
    sleep(1);
  }
}
//  pid_t ret=waitpid(id,&status,0);
//  if(ret > 0)
//  {
//    printf("father wait:%d\n",ret);
//  }
//  else
//  {
//    printf("father wait fail");
//  }
//




















//int func()
//{
//  printf("func test!");
//  return 1;
//}
//
//int main()
//{
//  func();
//  exit(12);
//  for(int i=0;i<100;i++)
//  {
//    printf("%d %s\n",i, strerror(i));
//  }
// return 0;
//// 测试退出码  
//  printf("hello world");
//  return 123;
//
//var
